package com.hhf.springboot.model.vo;

import com.hhf.springboot.model.entity.OrderInfo;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.Date;

/**
 * 订单信息视图
 *
 * @author hhf
 * @from <a href="https://gitee.com/hanhuaifei/projects">我的gitee</a>
 * @Date 2024/9/26
 */
@Data
public class OrderInfoVO implements Serializable {

    /**
     * id
     */
    private Long id;

    /**
     * 订单名称
     */
    private String name;

    /**
     * 是否需要代码(0-不需要,1-需要)
     */
    private Integer needCode;

    /**
     * 是否需要论文(0-不需要,1-需要)
     */
    private Integer needDoc;

    /**
     * 是否需要远程部署(0-不需要,1-需要)
     */
    private Integer needDeploy;

    /**
     * 订单总金额(单位:分)
     */
    private Integer amount;

    /**
     * 业务订单号（业务系统生成）
     */
    private String orderNo;

    /**
     * 第三方支付流水号
     */
    private String transactionId;

    /**
     * 状态(0-未支付,1-已支付,2-已失效,3-已退款)
     */
    private Integer status;

    /**
     * 下单的目标id(可能为bisheProjectId也可能为serviceId)
     */
    private Long targetId;

    /**
     * 订单类型：project/service
     */
    private String type;

    /**
     * 创建用户 id
     */
    private Long userId;

    /**
     * 付款时间
     */
    private Date payTime;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;


    /**
     * 创建用户信息
     */
    private UserVO user;

    /**
     * 封装类转对象
     *
     * @param orderInfoVO
     * @return
     */
    public static OrderInfo voToObj(OrderInfoVO orderInfoVO) {
        if (orderInfoVO == null) {
            return null;
        }
        OrderInfo orderInfo = new OrderInfo();
        BeanUtils.copyProperties(orderInfoVO, orderInfo);
        return orderInfo;
    }

    /**
     * 对象转封装类
     *
     * @param orderInfo
     * @return
     */
    public static OrderInfoVO objToVo(OrderInfo orderInfo) {
        if (orderInfo == null) {
            return null;
        }
        OrderInfoVO orderInfoVO = new OrderInfoVO();
        BeanUtils.copyProperties(orderInfo, orderInfoVO);
        return orderInfoVO;
    }
}
